package conjuntos;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

import org.junit.Assert;
import org.junit.Test;

public class DocumentoTest {

	@Test
	public void buscarConsonantesTest() {
		List<Parrafo> parrafos = new LinkedList<Parrafo>();

		List<Palabra> palabras1 = new LinkedList<Palabra>();
		palabras1.add(new Palabra("La"));
		palabras1.add(new Palabra("casa"));
		parrafos.add(new Parrafo(palabras1));

		List<Palabra> palabras2 = new LinkedList<Palabra>();
		palabras2.add(new Palabra("Llueve"));
		palabras2.add(new Palabra("azul"));
		parrafos.add(new Parrafo(palabras2));
		
		Set<Character> letras = new HashSet<Character>();
		letras.addAll(new Palabra("La").buscarConsonantes());
		letras.addAll(new Palabra("casa").buscarConsonantes());
		letras.addAll(new Palabra("Llueve").buscarConsonantes());
		letras.addAll(new Palabra("azul").buscarConsonantes());
		
		Documento doc = new Documento(parrafos);

		Assert.assertEquals(letras, doc.buscarConsonantes());

	}

	@Test
	public void buscarVocalesTest() {
		List<Parrafo> parrafos = new LinkedList<Parrafo>();

		List<Palabra> palabras1 = new LinkedList<Palabra>();
		palabras1.add(new Palabra("La"));
		palabras1.add(new Palabra("casa"));
		parrafos.add(new Parrafo(palabras1));

		List<Palabra> palabras2 = new LinkedList<Palabra>();
		palabras2.add(new Palabra("Llueve"));
		palabras2.add(new Palabra("azul"));
		parrafos.add(new Parrafo(palabras2));
		
		Set<Character> letras = new HashSet<Character>();
		letras.addAll(new Palabra("La").buscarVocales());
		letras.addAll(new Palabra("casa").buscarVocales());
		letras.addAll(new Palabra("Llueve").buscarVocales());
		letras.addAll(new Palabra("azul").buscarVocales());
		
		Documento doc = new Documento(parrafos);

		Assert.assertEquals(letras, doc.buscarVocales());
	}

	@Test
	public void buscarLetrasTest() {
		List<Parrafo> parrafos = new LinkedList<Parrafo>();

		List<Palabra> palabras1 = new LinkedList<Palabra>();
		palabras1.add(new Palabra("La"));
		palabras1.add(new Palabra("casa"));
		parrafos.add(new Parrafo(palabras1));

		List<Palabra> palabras2 = new LinkedList<Palabra>();
		palabras2.add(new Palabra("Llueve"));
		palabras2.add(new Palabra("azul"));
		parrafos.add(new Parrafo(palabras2));
		
		Set<Character> letras = new HashSet<Character>();
		letras.addAll(new Palabra("La").buscarLetras());
		letras.addAll(new Palabra("casa").buscarLetras());
		letras.addAll(new Palabra("Llueve").buscarLetras());
		letras.addAll(new Palabra("azul").buscarLetras());
		
		Documento doc = new Documento(parrafos);

		Assert.assertEquals(letras, doc.buscarLetras());

	}

	@Test
	public void ordenAlfabeticoDePalabrasTest() {
		List<Parrafo> parrafos = new LinkedList<Parrafo>();

		List<Palabra> palabras1 = new LinkedList<Palabra>();
		palabras1.add(new Palabra("La"));
		palabras1.add(new Palabra("casa"));
		parrafos.add(new Parrafo(palabras1));

		List<Palabra> palabras2 = new LinkedList<Palabra>();
		palabras2.add(new Palabra("Llueve"));
		palabras2.add(new Palabra("azul"));
		parrafos.add(new Parrafo(palabras2));
		
		Documento doc = new Documento(parrafos);
		
		SortedSet<Palabra> palabrasOrdenadas;
		palabrasOrdenadas = new TreeSet<Palabra>(new ComparadorDePalabras());

		palabrasOrdenadas.add(new Palabra("La"));
		palabrasOrdenadas.add(new Palabra("Llueve"));
		palabrasOrdenadas.add(new Palabra("azul"));
		palabrasOrdenadas.add(new Palabra("casa"));

		Assert.assertEquals(palabrasOrdenadas, doc.buscarPalabras());
	}

	@Test
	public void ordenAlfabeticoYLargoDePalabrasTest() {
		List<Parrafo> parrafos = new LinkedList<Parrafo>();

		List<Palabra> palabras1 = new LinkedList<Palabra>();
		palabras1.add(new Palabra("La"));
		palabras1.add(new Palabra("casa"));
		palabras1.add(new Palabra("choripan"));
		parrafos.add(new Parrafo(palabras1));

		List<Palabra> palabras2 = new LinkedList<Palabra>();
		palabras2.add(new Palabra("Llueve"));
		palabras2.add(new Palabra("azul"));
		parrafos.add(new Parrafo(palabras2));
		
		Documento doc = new Documento(parrafos);
		
		SortedSet<Palabra> palabrasOrdenadas;
		palabrasOrdenadas = new TreeSet<Palabra>(new ComparadorDeAnchoDePalabras());

		palabrasOrdenadas.add(new Palabra("La"));
		palabrasOrdenadas.add(new Palabra("Llueve"));
		palabrasOrdenadas.add(new Palabra("azul"));
		palabrasOrdenadas.add(new Palabra("casa"));
		palabrasOrdenadas.add(new Palabra("choripan"));
		
		Assert.assertEquals(palabrasOrdenadas,
				doc.buscarPalabrasOrdenadasPorLongitud());
	}
}
